Zeroconf ( Avahi ) をインストールしてみる
今回はZeroconf(Zero Configuration Networking)って言葉は聞くけどなんのこっちゃ?と言う素朴な疑問からスタンダード的存在であるAvahiをセットアップしてみます。相変わらずニッチなものを検証するのが好きですが、、、
Wikipediaには「サーバ個々にDHCPサーバとDDNSクライアントがあるような仕組み」です。と書いてありますが、なかなかピンときませんが、 個々のサーバ上で起動したAvahiがIPアドレスを自分自身で割り振り、マルチキャストDNSリクエスト(mDNS)で周りのBonjourサーバ(レシーバ?)へ自分の存在を通知します。稼働しているサービスの種類も登録できるので、どこで何が動いているのかを見つけ出すのが簡単になります。但し、*.serviceファイルで定義したもののみ。 と言う説明を読んでなんとなく分かった様な気になりました。
とは言え、実際に動かしてみてどうなるのか?を実際に確認しないと済まない性格なので、Avahiをセットアップしてみることにしました。
まずはavahi-0.6.28で本体のモジュールをダウンロードします。Avahiの必須依存パッケージはintltool-0.50.0とGlib-2.30.2が必須のようなので、それも一緒にダウンロードします。
それ以外にもconfigureする際に依存しているパッケージが山ほどありますが、オプション(--disable-gtk 等)で使わないようにしておけば以下の依存パッケージは不要です。(以下はあくまでも任意) D-Bus Python Bindings-0.84.0, gobject-introspection-1.30.0, gtk+-2.24.8, gtk+-3.2.3, libdaemon-0.14, libglade-2.6.4, Python-2.7.2, PyGTK-2.17.0, Qt-3.3.8d, Qt-4.8.0 ただし、オプションで使わないと明示的にしないとconfigureの際にエラーになるので、何度かトライする必要が出てくるかもしれません。
とりあえず必須依存パッケージをセットアップします。 intltool-0.50.0をインストールするにはXML::Parser-2.40と言うパッケージが必須依存となっているので、それをインストールします。で、今度はXML-Parser-2.40の必須依存パッケージとして、expat-2.0.1が必須依存となっているので、それを先にインストールします。expat-2.0.1をインストールする場合、必須パッチ(expat-2.0.1-fixes-3.patch)がありますので、それもインストールします。あぁ~依存関係は相変わらずめんどい。。。
※ユーザはとりあえず、rootになっている前提です。
tar xvfz expat-2.0.1.tar.gz cd expat-2.0.1 ./configure
という事で、早速エラーですw 素のCentOSなので、開発ツールがなんにも入ってませんでした>< ということで、開発ツールをインストールしました。 これで再度実行して、無事終了。次にパッチを当てます
patch -Np1 -i ../expat-2.0.1-fixes-3.patch && ./configure --prefix=/usr && make
無事パッチも完了。う~ん順調でなんだか怖いw 次ステップは以下のコマンドでインストールします。
make install && install -v -m755 -d /usr/share/doc/expat-2.0.1 && install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.0.1
次にXML-Parser-2.40をセットアップします。
tar xvfz XML-Parser-2.40.tar.gz cd XML-Parser-2.40 perl Makefile.PL && make && make test make install
ようやく Intltool のインストールに入ります。
tar xvfz intltool-0.50.0.tar.gz cd intltool-0.50.0 ./configure --prefix=/usr && make make install && install -v -m644 -D doc/I18N-HOWTO \ /usr/share/doc/intltool-0.50.0/I18N-HOWTO
次にavahiで2つ目の必須依存パッケージであるGLib-2.30.2をセットアップします。
こちらについてもGLib-2.30.2に対して必須依存パッケージがありますので、それを先にインストールしておきます。(libffi-3.0.10 と Python-2.7.2) 拡張子.xzは解凍が面倒だったので、Python-2.7.2については.tgzのアーカイブを落としてきました。
tar xvfz libffi-3.0.10.tar.gz cd libffi-3.0.10 ./configure --prefix=/usr && make make install
tar xvfz Python-2.7.2.tgz cd Python-2.7.2
Pythonをビルドします。
sed -i "s/ndbm_libs = \[\]/ndbm_libs = ['gdbm', 'gdbm_compat']/" setup.py && ./configure --prefix=/usr --enable-shared && make make install && chmod -v 755 /usr/lib/libpython2.7.so.1.0
これでようやくGLib のインストールに入れます。※Python-2.7.2の時と同様に拡張子.xzのアーカイブではなく、別フォーマットの.tar.bz2のアーカイブをダウンロードしてきました。
bunzip2 glib-2.30.2.tar.bz2 tar xvf glib-2.30.2.tar cd glib-2.30.2
GLib のインストール
PCRE_LIBS=-lpcre PCRE_CFLAGS=" " \ LIBFFI_LIBS=-lffi LIBFFI_CFLAGS=-I/usr/lib/libffi-3.0.10/include \ ./configure --prefix=/usr --sysconfdir=/etc --with-pcre=system && make
makeでエラー発生。。。 configure: error: *** Working zlib library and headers not found *** という事で、zlib-1.2.6.tar.gzのソースをダウンロードしてインストールします。
cd /usr/local/src mv /tmp/zlib-1.2.6.tar.gz . tar xvfz zlib-1.2.6.tar.gz cd zlib-1.2.6 ./configure -shared make make install
再度GLib のインストールをしますが、またmakeでエラー発生。。。 configure: error: *** The system-supplied PCRE does not support Unicode properties or UTF-8. 推奨って書いてたからPCRE-8.30入れてなかったですが、結局入れることにします。PCRE-8.30
bunzip2 pcre-8.30.tar.bz2 tar xvf pcre-8.30.tar cd pcre-8.30 ./configure --prefix=/usr --disable-static --libdir=/lib \ --docdir=/usr/share/doc/pcre-8.30 --enable-utf8 --enable-unicode-properties \ --enable-pcregrep-libz --enable-pcregrep-libbz2 && make
今度はPCRE-8.30のmakeでエラー発生。。。 ** Cannot --enable-pcregrep-libbz2 because bzlib.h was not found とりあえず先に進めたいので、オプションの--enable-pcregrep-libbz2を外してmake成功。
make install
make installも無事成功したので、Glibのインストールに再度チャレンジします。
PCRE_LIBS=-lpcre PCRE_CFLAGS=" " \ LIBFFI_LIBS=-lffi LIBFFI_CFLAGS=-I/usr/lib/libffi-3.0.10/include \ ./configure --prefix=/usr --sysconfdir=/etc --with-pcre=system && make
無事Glibのmakeが成功しました!最後のmake installがどうなるか。。。
make install && ln -v -sfn ../../lib/glib-2.0/include/glibconfig.h /usr/include/glib-2.0/glibconfig.h
Glibのmake installも成功しました!ということで、ようやくavahi-0.6.28のセットアップに入ります。
事前準備として、デーモン avahi-daemon が起動した後は、これを制御するために、専用のユーザーおよびグループを利用することが推奨されているとのことなので、root ユーザーとなって以下を実行しますと記述があったので、作ろうと思ったのですが、ここまでセットアップ作業をしている中でいつの間にかavahiユーザが作られていましたw なので、下記ユーザ追加はavahiユーザがない場合に実行ってことになります。。。
groupadd -fg 84 avahi && useradd -c "Avahi Daemon Owner" -d /dev/null -u 84 \ -g avahi -s /bin/false avahi || [ $? == 9 ]
※追加されている場合は上記を飛ばして、以下を追加します。
groupadd -fg 86 netdev
tar xvf avahi-0.6.28.tar.gz cd avahi-0.6.28
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-gtk \ --disable-gtk3 \ --disable-qt3 \ --disable-qt4 \ --disable-mono \ --disable-monodoc \ --disable-python \ --disable-dbus \ --disable-libdaemon \ --enable-core-docs \ --with-distro=lfs && make
はい、makeでエラーです>< configure: error: *** libgdbm not found *** も~ってことで、ぐぐってみると。。。 Typically you will need the “-devel” package when running into an error with a configure script so based on the above output the gdbm-devel package would need to be installed as shown in the below example output. と書いてあったのでyum install gdbm-develでインストールすればいいんだと思い、コマンドを実行してみました。
yum install gdbm-devel
すると。。。
There was a problem importing one of the Python modules required to run yum. The error leading to this problem was: No module named yum Please install a package which provides this module, or verify that the module is installed correctly. It's possible that the above module doesn't match the current version of Python, which is: 2.7.2 (default, Feb 22 2012, 17:51:13) [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] If you cannot solve this problem yourself, please go to the yum faq at: http://wiki.linux.duke.edu/YumFaq
ってそろそろ挫折感たっぷりなんですけど。。。 気を取り直して先に進むとしよう。で、どうもpythonのバージョンの問題と言ってるようです。確かにpythonは2.7.2のバージョンをいれてます。多分、pythonのバージョンアップによりなんかモジュールが必要なのでしょうが、何が必要かはわからないので、yumをfindしてみたら、 /usr/lib/python2.4/site-packages/yum にあったので、/usr/bin/yum を vi で開いて#!/usr/bin/python → #!/usr/bin/python2.4 に無理やり書き換えて再度実行してみました。
とりあえずyum install gdbm-develは問題なく動作してインストールが完了しましたので、再度avahiのインストールにチャレンジ。
./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-gtk \ --disable-gtk3 \ --disable-qt3 \ --disable-qt4 \ --disable-mono \ --disable-monodoc \ --disable-python \ --disable-dbus \ --disable-libdaemon \ --enable-core-docs \ --with-distro=lfs && make
avahiのmakeが成功しました!ということで、最後にmake installをしてみます。
make install
avahiのmake installも成功しました!疲れ果てたので、今日はこの辺で。。。